package com.zjun.core;

import com.zjun.annotation.Idempotent;
import org.aspectj.lang.ProceedingJoinPoint;

/**
 * 幂等执行处理器
 */
public interface IdempotentExecuteHandler {
    /**
     * 幂等处理逻辑
     * @param wrapper 幂等参数包装器
     */
    void handler(IdempotentParamWrapper wrapper);

    /**
     * 执行幂等处理逻辑
     * @param joinPoint
     * @param idempotent
     */
    void execute(ProceedingJoinPoint joinPoint, Idempotent idempotent);

    /**
     * 异常流程处理
     */
    default void exceptionProcessing(){

    }

    /**
     * 后置处理
     */
    default void postProcessing(){

    }
}
